﻿using Abp.Application.Services;
using Abp.Application.Services.Dto;
using System.Threading.Tasks;

namespace AbpProjectTemplate.Application
{
    public interface ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, TGetInput, TDeleteInput>: IApplicationService
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TUpdateInput : IEntityDto<TPrimaryKey>
        where TGetInput : IEntityDto<TPrimaryKey>
        where TDeleteInput : IEntityDto<TPrimaryKey>
    {
        /// <summary>
        /// 创建
        /// </summary>
        Task<TEntityDto> Create(TCreateInput input);
        /// <summary>
        /// 获取单条数据
        /// </summary>
        Task<TEntityDto> Get(TGetInput input);
        /// <summary>
        /// 获取分页数据
        /// </summary>
        Task<PagedResultDto<TListEntityItem>> GetPagedList(TGetPagedListInput input);
        /// <summary>
        /// 更新
        /// </summary>
        Task<TEntityDto> Update(TUpdateInput input);
        /// <summary>
        /// 删除
        /// </summary>
        Task Delete(TDeleteInput input);
        ///// <summary>
        ///// 批量删除
        ///// </summary>
        //Task Deletes(IEnumerable<TPrimaryKey> ids);
    }
    public interface ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput>
        : ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TCreateInput, TUpdateInput, EntityDto<TPrimaryKey>, EntityDto<TPrimaryKey>>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TUpdateInput : IEntityDto<TPrimaryKey>
    {

    }

    public interface ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TEditInput>
        : ICrudApplicationService<TEntityDto, TPrimaryKey, TListEntityItem, TGetPagedListInput, TEditInput, TEditInput, EntityDto<TPrimaryKey>, EntityDto<TPrimaryKey>>
        where TEntityDto : IEntityDto<TPrimaryKey>
        where TListEntityItem : IEntityDto<TPrimaryKey>
        where TEditInput : IEntityDto<TPrimaryKey>
    {

    }

    public interface ICrudApplicationService<TEntityDto, TListEntityItem, TGetPagedListInput, TEditInput>
        : ICrudApplicationService<TEntityDto, int, TListEntityItem, TGetPagedListInput, TEditInput, TEditInput, EntityDto<int>, EntityDto<int>>
        where TEntityDto : IEntityDto<int>
        where TListEntityItem : IEntityDto<int>
        where TEditInput : IEntityDto<int>
    {

    }
}

